﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using VentaElectrodomesticos.Negocio;
using VentaElectrodomesticos.Datos;
using VentaElectrodomesticos.Contrato;
using VentaElectrodomesticos.GUI.Base;
using VentaElectrodomesticos.GUI.Helpers;

namespace VentaElectrodomesticos.GUI.AbmProducto
{
    public partial class FormProducto : BaseEdicion<ProductoNegocio,ProductoDAO,Producto>
    {
        static FormProducto instance;
        List<Categoria> categorias = new List<Categoria>();

        public static FormProducto getInstance()
        {
            if (instance == null)
            {
                instance = new FormProducto();
            }
            instance.BringToFront();
            return instance;
        }

        public FormProducto()
        {
            InitializeComponent();
        }

        protected override void getValues()
        {
            this.Entity.Nombre = tNombre.Text;
            this.Entity.Descripcion = tDesc.Text;
            this.Entity.Precio = Decimal.Parse(tprecio.Text);
            this.Entity.Marca = tMarca.Text;
            this.Entity.Categoria_Id = Convert.ToInt32(treeCategorias.SelectedNode.Tag);
            this.Entity.inactivo = this.checkBoxBaja.Checked;
        }                

        protected override void setValues()
        {
            this.tNombre.Text = this.Entity.Nombre;
            this.tDesc.Text = this.Entity.Descripcion;
            this.tprecio.Text = this.Entity.Precio.ToString();
            this.tMarca.Text = this.Entity.Marca;

            if (this.Entity.inactivo == null)
            {
                this.Entity.inactivo = false;
            }
            this.checkBoxBaja.Checked = (bool)this.Entity.inactivo;

            TreeBuilder treeBuilder = new TreeBuilder(categorias, treeCategorias);
            if (this.Entity.Categoria_Id != null)
            {
                treeBuilder.setSelectedNode((int)this.Entity.Categoria_Id);
            } else {
                treeBuilder.setSelectedNode(-1);
            }
            treeBuilder.buildTree();
        }

        public override void changeLayout(bool edit)
        {
            base.changeLayout(edit);
            panelEdicion.Visible = edit;
            panelCreacion.Visible = !edit;
            panelCreacion2.Visible = !edit;
        }

        private void FormProducto_FormClosed(object sender, FormClosedEventArgs e)
        {
            instance = null;
            base.OnClosed(e);
        }

        public void setCategorias(List<Categoria> categorias)
        {
            this.categorias = categorias;
        }

        protected override void cumpleValidaciones()
        {
            if (this.treeCategorias.SelectedNode == null || treeCategorias.SelectedNode.Nodes.Count != 0)
                this.Errores.Add("La categoria no es valida.");
            decimal a;
            if (tNombre.Text == "")
                this.Errores.Add("El nombre no debe ser vacío");
            if (tMarca.Text == "")
                this.Errores.Add("La marca no debe ser vacía");
            if (!Decimal.TryParse(tprecio.Text, out a))
                this.Errores.Add("El precio no es válido");
        }

    }
}
